public class CircularQueue3 {
    //采用记录元素有效个数的方法来实现循环队列
    //先创建一个数组
    public int[]elem;
    //记录数组中元素的有效个数
    public int usedSize;
    public int front; //头部
    public int rear; //尾部
    //构造方法，将数组构造出来
    public CircularQueue3(int k){
        this.elem=new int[k];
    }
    //入队
    public boolean enQueue(int value){
        //先判断是否满了
        if (isFull()){
            return false;
        }
        elem[rear]=value;
        rear=(rear+1)% elem.length;
        usedSize++;
        return true;
    }
    //出队
    public boolean deQueue(){
        //先判断是否为空
        if (isEmpty()){
            return false;
        }
        front=(front+1)% elem.length;
        usedSize--;
        return true;
    }
    //获取头部元素
    public int Front(){
        //先判断是否为空
        if (isEmpty()){
            return -1;
        }
        return elem[front];
    }
    //获取尾部元素
    public int Rear(){
        //先判断是否为空
        if (isEmpty()){
            return -1;
        }
        //把rear为0时单独判断
        int index=-1;
        if (rear==0){
            index= elem.length-1;
        }
        else {
            index=rear-1;
        }
        return elem[index];
    }
    private boolean isEmpty() {
        return usedSize==0;
    }

    private boolean isFull() {
        return usedSize==elem.length;
    }
}
